package com.example.apidbtest;


import cn.hutool.core.lang.TypeReference;
import cn.hutool.db.ds.simple.SimpleDataSource;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.WorkbookUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.StringUtils;

import javax.sql.DataSource;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author lanyanhua
 * @date 2025年06月16日 22:24
 * @description
 */
public class ApiTestCase {

    @Test
    void testApi() {
        String post = HttpUtil.post("http://localhost:8080/api/vocational_school", """
                {
                	"action": "zzxx.info.list",
                	"timestamp": "1552014072272"
                }
                """);
        System.out.println(post);
    }

    @Test
    void jdbc(){
        //数据库
        // 这里可以使用JDBC或其他库来实现
        JdbcTemplate jdbcTemplate = new JdbcTemplate(new SimpleDataSource(
                "jdbc:mysql://119.45.54.104:13306/sheyue-digital-human-dev",
                "root",
                "Abcdef123456"
        ));
        List<Map<String, Object>> maps = jdbcTemplate.queryForList("SELECT * FROM sys_user");
        for (Map<String, Object> map : maps) {
            System.out.println(map);
        }
        // 例如，连接到数据库并执行查询
        System.out.println("数据库连接成功");
    }

    @Test
    void readExcel() {
        // 读取Excel文件的逻辑
        try (ExcelReader reader = new ExcelReader("api_dbtable.xlsx", 0)) {

            List<List<Object>> read = reader.read();
            for (List<Object> row : read) {
                //学校基本信息新增：action=zzxx.info.add,zzxx_info
                String string = row.get(0).toString();
                if(!StringUtils.hasLength(string) || !string.contains("：")) {
                    continue; // 跳过不包含"："的行
                }
                String[] split = string.split("：");
                String action = split[1].split("=")[1];
                System.out.println("当前接口：" + split[0]+ "，action=" + action+"，表名=" + row.get(1).toString().trim());
                //todo 调用接口 、查询数据库
                String post = HttpUtil.post("http://localhost:8080/api/vocational_school", """
                {
                	"action": "%s",
                	"timestamp": "1552014072272"
                }
                """.formatted(action));
                // 将接口返回的JSON字符串转换为R对象
                R<zzxx> res = JSONUtil.toBean(post, new TypeReference<>() {
                },true);
                int statusNum = 0;
                for (zzxx datum : res.getData()) {
                    if(datum.getStatus() == 1 || datum.getStatus() == 2) {
                        statusNum++;
                    }
                }

                //todo 对比数据
                //todo 写入结果
                row.add(statusNum); // 添加一列用于存储接口调用结果
                row.add("数据库数据"); // 添加一列用于存储接口调用结果
                row.add("状态"); // 添加一列用于存储接口调用结果
            }
            read.add(0, List.of("接口名称", "表名", "接口数据", "数据库数据", "状态")); // 添加表头
//            随机文件名
            String s = "/Users/lanyanhua/IdeaProjects/api-db-test/api_dbtable_res%s.xlsx"
                    .formatted(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
            ExcelWriter writer = new ExcelWriter(s);
            writer.write(read); // 将读取的数据写回到Excel
            writer.close();
        }

        // 这里可以使用Apache POI或其他库来实现
        // 例如，读取Excel文件并将数据存储到数据库中
    }
}
